// src/utils/tools.js

/**
 * @description: 工具类随机生成身份证号和出生日期
 * @param {*} age 
 * @param {*} gender 
 * @returns 
 */
function generateRandomIdCard(age, gender) {
  // 地址码，这里用一个固定的值来简化实现
  const addressCode = '330102'; // 浙江省杭州市上城区
  // 出生日期码
  const birthYear = new Date().getFullYear() - age;
  const birthMonth = Math.floor(Math.random() * 12) + 1; // 1-12
  const birthDay = Math.floor(Math.random() * 28) + 1; // 1-28
  const birthDateCode = [birthYear.toString().slice(-2), padZero(birthMonth), padZero(birthDay)].join('');

  // 顺序码
  let serialNumber = Math.floor(Math.random() * 999).toString().padStart(3, '0'); // 001-999
  if (gender === 1) { //男
      serialNumber = parseInt(serialNumber) + 1; // 确保是奇数
      if (serialNumber % 2 === 0) {
          serialNumber += 1;
      }
  } else if (gender === 2) {//女
      serialNumber = parseInt(serialNumber) + 2; // 确保是偶数
      if (serialNumber % 2 !== 0) {
          serialNumber += 1;
      }
  }

  // 计算校验码
  const idCardWithoutCheck = addressCode + birthDateCode + serialNumber;
  const checkCode = calculateCheckCode(idCardWithoutCheck);

  // 构造完整的身份证号码
  const idCard = idCardWithoutCheck + checkCode;

  // 返回身份证号码和出生日期
  return {
      idCard: idCard,
      birthDate: `${birthYear}-${padZero(birthMonth)}-${padZero(birthDay)}`
  };
}
function padZero(num) {
  return num < 10 ? '0' + num : num;
}
function calculateCheckCode(idCardWithoutCheck) {
  const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  const checkCodeMap = '10X98765432';
  let sum = 0;

  for (let i = 0; i < 17; i++) {
      sum += parseInt(idCardWithoutCheck[i], 10) * weights[i];
  }

  const mod = sum % 11;
  return checkCodeMap.charAt(mod);
}

/**
 * @description: 工具类随机生成一个手机号
 * @returns 随机生成一个手机号
 */
function generatePhoneNumber() {
  // 生成前三位随机数，即运营商代码
  const start = 10000000000; // 起始号码
  const end = 99999999999; // 结束号码
  const operatorCodes = [
    '130-132', '133-135', '136-138', '139-142', '145-147', '148-149',
    '150-152', '155-156', '157-159', '165-166', '167-169', '170-172',
    '173-174', '175-176', '177-178', '180-182', '183-185', '186-187',
    '188-189', '190-192', '193-195', '196-197', '198-199',
  ];
  
  // 随机选择一个运营商代码范围
  const operatorCodeRange = operatorCodes[Math.floor(Math.random() * operatorCodes.length)];
  const operatorCode = Math.floor(Math.random() * (operatorCodeRange.split('-')[1] - operatorCodeRange.split('-')[0] + 1)) + parseInt(operatorCodeRange.split('-')[0], 10);
  
  // 生成后八位随机数，即用户号码
  const userNumber = Math.floor(Math.random() * (99999999 - 10000000 + 1)) + 10000000;
  
  // 组合成完整的手机号
  const phoneNumber = `${operatorCode}${userNumber}`;
  
  return phoneNumber;
}

const fs = require('fs');
const path = require('path');
const confFilePath = path.join(__dirname, 'sys.conf');
/**
 * 读取配置文件
 */
function readServerIPandPort() {
  return new Promise((resolve, reject) => {
      fs.readFile(confFilePath, 'utf8', (err, data) => {
          if (err) {
              reject(err);
          } else {
              const config = data.trim();
              resolve(config);
          }
      });
  });
}



// 导出 generateRandomIdCard 函数
module.exports = {
  generateRandomIdCard,
  generatePhoneNumber,
  readServerIPandPort
};


// // 示例调用
// const gender = 1; // 男性
// const age = 38; // 年龄（这里不直接使用，仅作为示例）
// const data = generateRandomIdCard(age, gender);
// console.log(data.idCard);
// console.log(data.birthDate);